#include <stdlib.h>
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>

#include "shared_memory.h"

/*
 * Dieses Unterprogramm erledigt die Verwaltung der Shared-Memory-Segmente.
 */

int shm_Segment_anlegen(size_t Groesse) {
	int shm_ID = shmget(IPC_PRIVATE, Groesse, IPC_CREAT | 0666);
	    
	if (shm_ID == -1) {
    	perror("Fehler beim Anlegen des Shared-Memory-Segments");
    	return(-1);
    } 
    return shm_ID;
}


void *shm_Segment_anbinden(int shm_ID) {
	void *shm_Zeiger = shmat(shm_ID, NULL, 0);

	if (shm_Zeiger == (void *) -1) {
    	perror("Fehler beim Anbinden des Shared-Memory-Segments");
    	return (void *) -1;
    }
    /* shm-Segment wird direkt als löschbar markiert, es wird dann automatisch gelöscht wenn alle Prozesse detacht sind.
       Dies funktioniert in diesem Fall, da nur bei Beendigung der Ausführung die SHM-Segmente detacht werden, nicht unter Laufzeit.*/
    shmctl(shm_ID, IPC_RMID, NULL);
    return shm_Zeiger;
}